// 创建设置好的全局唯一请求实例
import axios from "axios";
const REQUEST_SUCCESS = "0";
const isDev = process.env.NODE_ENV === "development";
const devBaseUrl = `/api/${process.env.VUE_APP_CONTEXT}`;
const http = axios.create({
  timeout: 20000,
  withCredentials: true,
  headers: {
    "X-Requested-With": "XMLHttpRequest"
  },
  baseURL: isDev ? devBaseUrl : `/${process.env.VUE_APP_CONTEXT}/` // 接口基本路径
});

// 响应拦截器
http.interceptors.response.use(
  response => {
    // 请求json文件
    if (/.*\.json$/.test(response.config.url)) {
      return response;
    }

    // 对错误进行统一处理
    if (
      response.data.code !== REQUEST_SUCCESS &&
      response.data.code !== +REQUEST_SUCCESS
    ) {
      if (!response.config.noMsg && response.data.msg) {
        console.error(response.data.msg);
      }
      return Promise.reject(response);
    } else if (
      response.data.code === REQUEST_SUCCESS &&
      response.data.code === +REQUEST_SUCCESS &&
      response.config.successNotify &&
      response.data.msg
    ) {
      // 弹出成功提示
      console.info(response.data.msg);
    }
    return Promise.resolve({
      code: response.data.code,
      msg: response.data.msg,
      data: response.data.data
    });
  },
  error => {
    if (error.message.indexOf("timeout") > -1) {
      console.error("请求超时，请重试！");
    } else {
      console.error(error.message);
    }

    return Promise.reject(error);
  }
);

// 请求拦截器
http.interceptors.request.use(
  config => {
    // 可在此处作参数去空格操作；所有搜索框可输入元素，都不需要去掉前后空格，只有仅输入空格时，此字段搜索无效。
    return config;
  },
  error => {
    // 对请求错误做些什么
    return Promise.reject(error);
  }
);

export default http;
